题目描述
删除有序链表中的重复节点,返回头节点
- 删除掉所有重复节点,例如1->1->2->2->3->4,返回3->4
- 重复的节点中保留一个,例如1->1->2->2->3->4,返回1->2->3->4
删除掉所有重复节点
function ListNode(x){
this.val = x;
this.next = null;
}
function deleteDuplication(pHead){
if(pHead === null || pHead.next === null)
return pHead;
var H = new ListNode(null);
H.next = pHead;
var pre = H;
var cur = pHead;
while(cur !== null && cur.next !== null) {
if(cur.next.val === cur.val){
var curRepetitiveVal = cur.val;
while(cur !== null && cur.val === curRepetitiveVal) {
cur = cur.next;
}
pre.next = cur;
}else{
pre = cur;
cur = cur.next;
}
}
return H.next;
}
细节
这里面有几个需要注意的细节:
- 新建一个空的头节点,因为这里面牵扯到换新的链表头的问题,所以为了方便新建一个新的节点作为链表的头节点
每个重复节点中保留一个
function ListNode(x){
this.val = x;
this.next = null;
}
function deleteDuplication(pHead){
if(pHead === null || pHead.next === null)
return pHead;
var H = new ListNode(null);
H.next = pHead;
var pre = H;
var cur = pHead;
while(cur !== null && cur.next !== null) {
if(cur.next.val === cur.val){
pre = cur;
var curRepetitiveVal = cur.val;
while(cur !== null && cur.val === curRepetitiveVal) {
cur = cur.next;
}
pre.next = cur;
}else{
pre = cur;
cur = cur.next;
}
}
return H.next;
}
细节
- 这个和删除掉所有重复节点的区别就是发现有相同的节点时,pre指针立马指向重复的节点中的第一个节点
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。